エラー内容
(shotwell:*****): GLib-GIO-ERROR **: 03:20:28.043: epoll_create1 () failed: Too many open files
Trace/breakpoint trap (core dumped)
原因?
Linux サーバでの「Too many open files」対策について
解決法 (ChatGPT o1の出力)
Shotwell 実行中に「epoll_create1 () failed: Too many open files」といったエラーが出る場合、多くの場合はファイルディスクリプター(同時に開けるファイルやソケットなど)の上限に引っかかっている可能性が高いです。Ubuntu や他の Linux ディストリビューションでしばしば起こりうる現象です。以下の手順を試してみてください。
1. 現在のファイルディスクリプター上限を確認する
まず、端末を開いて現在のファイルディスクリプターの上限を確認します。
ulimit -n
たとえば 1024 など小さい値になっていた場合、Shotwell やその他アプリケーションを多数同時に利用しているとすぐに上限に達してしまうことがあります。
2. セッションごとの上限を一時的に変更する
現在ログイン中のセッション内だけで上限を一時的に変更するには、以下のように実行します。
ulimit -n 65535
値はたとえば 65535 などある程度大きな数に設定します。
この方法では、現在のシェルを閉じると設定がリセットされるため、再起動や新しいターミナルを開いた際には再び設定し直す必要があります。
3. 永続的に上限を変更する
システム全体、あるいは特定のユーザーに対して永続的にファイルディスクリプター数の上限を設定したい場合は、下記の方法を検討します。
3-1. /etc/security/limits.conf を編集する
-
/etc/security/limits.conf
ファイルをテキストエディタで開きます(sudo で開く必要があります)。sudo nano /etc/security/limits.conf
-
ファイルの末尾などに、以下のような行を追加します(例としてユーザー名を「your_username」とする場合)。
your_username soft nofile 65535 your_username hard nofile 65535
-
soft nofile
は「通常時の上限」 -
hard nofile
は「絶対に超えられない上限」
-
- ファイルを保存してログアウトし、再度ログインし直すか再起動すると設定が反映されます。
3-2. Systemd ユニットでの設定
近年の Ubuntu では systemd が導入されているため、サービスとして Shotwell を起動しているわけではない場合はあまり関係ありませんが、もし systemd のサービスとして何らかの制御をしたい場合には、/etc/systemd/system.conf
や /etc/systemd/user.conf
などに DefaultLimitNOFILE=
を設定する方法もあります。
4. Shotwell 以外の要因を確認する
- 何らかのプラグインやバックグラウンドで動いているプロセスが大量のファイルディスクリプターを使用している可能性もあります。
-
lsof
コマンドやps
コマンドなどを使って、どのプロセスがどれだけファイルを開いているか調べることができます。たとえば:
でシステム全体のオープンファイル数をざっくりと把握できます。lsof | wc -l
- また、
lsof -p [PID]
でプロセスごとの詳細を確認できます。
5. 再度 Shotwell を起動して確認
ファイルディスクリプターの上限を引き上げたり、不要なプロセスを停止するなどしてから、もう一度 Shotwell を起動してエラーが解消されるか確認してみてください。
まとめ
-
一時的:
ulimit -n 65535
などでファイルディスクリプターの上限を上げてみる。 -
永続的:
/etc/security/limits.conf
や systemd の設定を編集し、再ログイン・再起動で反映させる。 - それでも改善しない場合は、ほかのプロセスが異常にファイルハンドルを消費していないか、マシンのメモリやストレージが原因で処理が詰まっていないかを確認する。
この手順を試してみることで多くの場合「Too many open files」エラーが解消されるはずです。